package cn.frank.framework.king.conf.init.listener;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

import java.util.Arrays;

/**
 * @description: TODO
 * @author: renjiangyang
 * @date 2025/7/31 11:24:40
 * @since 1.8
 */
// ✅ Bean 全部初始化完毕，Spring Context 刷新完成
public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {

    /**
     * 1. ApplicationStartingEvent
     * 2. ApplicationEnvironmentPreparedEvent
     * 3. ApplicationContextInitializedEvent
     * 4. ApplicationPreparedEvent
     * 5. ✅ ContextRefreshedEvent                 <-- 你监听的就是这个
     * 6. ApplicationStartedEvent
     * 7. ApplicationReadyEvent
     */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 所有 Bean 初始化完成 → @PostConstruct 全部执行完 → Spring Context 完整可用了 → 触发 ContextRefreshedEvent
        System.out.println(" [3] 所有 Bean 初始化完成，Context 刷新完毕");

        ApplicationContext context = event.getApplicationContext();

        // 只打印 Root Context 下的 Bean，避免重复（可选）
        if (context.getParent() == null) {
            String[] beanNames = context.getBeanDefinitionNames();
            Arrays.sort(beanNames); // 排序

            System.out.println("📦 当前 ApplicationContext 中已加载的 Bean 数量: " + beanNames.length);
            for (String name : beanNames) {
                System.out.println("  - " + name);
            }
        }

        //    初始化常用缓存
        //    dictCacheService.initAllDict(); // 从数据库查字典 -> 缓存到 Redis 或内存中
        //    regionService.loadAllRegion();  // 加载所有地区信息
        //    permissionService.initMenuPermissions(); // 加载权限树结构
    }
}